ostree-repo: new public function `ostree_repo_list_refs_ext`
authorGiuseppe Scrivano <gscrivan@redhat.com>
Wed, 2 Mar 2016 08:58:38 +0000 (09:58 +0100)
committerColin Walters <walters@verbum.org>
Wed, 2 Mar 2016 19:52:02 +0000 (14:52 -0500)
It accepts a `flags` argument to control its behavior.  Differently
from `ostree_repo_list_refs`, the `refspec_prefix` is not removed from
the results.

Signed-off-by: Giuseppe Scrivano <gscrivan@redhat.com>
apidoc/ostree-sections.txt
src/libostree/libostree.sym
src/libostree/ostree-repo-refs.c
src/libostree/ostree-repo.h

index 4b22e25b9052ba1d9ceeb6c0b5b303f197a01d1c..e4ce525d53d154cfb61d61acf6f5c7ce2c573e7c 100644 (file)
@@ -260,6 +260,7 @@ ostree_repo_write_content_async
 ostree_repo_write_content_finish
 ostree_repo_resolve_rev
 ostree_repo_list_refs
+ostree_repo_list_refs_ext
 ostree_repo_remote_list_refs
 ostree_repo_load_variant
 ostree_repo_load_commit
index ce8861f9aaeddfbbebf8f9c7e67860634a48e138..f86a1ead0fd43925cde089cfa8e7480ea9e830a1 100644 (file)
@@ -315,4 +315,5 @@ local:
 LIBOSTREE_2016.4 {
 global:
         ostree_repo_get_dfd;
+        ostree_repo_list_refs_ext;
 } LIBOSTREE_2016.3;
index 68e34f205db0825bd705a2cca9cf565acbba1cca..bf480067fec8f102c125c90a72703f9e789e6e04 100644 (file)
@@ -508,24 +508,13 @@ enumerate_refs_recurse (OstreeRepo    *repo,
   return ret;
 }
 
-/**
- * ostree_repo_list_refs:
- * @self: Repo
- * @refspec_prefix: (allow-none): Only list refs which match this prefix
- * @out_all_refs: (out) (element-type utf8 utf8): Mapping from ref to checksum
- * @cancellable: Cancellable
- * @error: Error
- *
- * If @refspec_prefix is %NULL, list all local and remote refspecs,
- * with their current values in @out_all_refs.  Otherwise, only list
- * refspecs which have @refspec_prefix as a prefix.
- */
-gboolean
-ostree_repo_list_refs (OstreeRepo       *self,
-                       const char       *refspec_prefix,
-                       GHashTable      **out_all_refs,
-                       GCancellable     *cancellable,
-                       GError          **error)
+static gboolean
+_ostree_repo_list_refs_internal (OstreeRepo       *self,
+                                 gboolean         cut_prefix,
+                                 const char       *refspec_prefix,
+                                 GHashTable      **out_all_refs,
+                                 GCancellable     *cancellable,
+                                 GError          **error)
 {
   gboolean ret = FALSE;
   g_autoptr(GHashTable) ret_all_refs = NULL;
@@ -568,12 +557,14 @@ ostree_repo_list_refs (OstreeRepo       *self,
             {
               glnx_fd_close int base_fd = -1;
               g_autoptr(GString) base_path = g_string_new ("");
+              if (!cut_prefix)
+                g_string_printf (base_path, "%s/", ref_prefix);
 
-              if (!glnx_opendirat (self->repo_dir_fd, path, TRUE, &base_fd, error))
+              if (!glnx_opendirat (self->repo_dir_fd, cut_prefix ? path : prefix_path, TRUE, &base_fd, error))
                 goto out;
 
               if (!enumerate_refs_recurse (self, remote, base_fd, base_path,
-                                           base_fd, ".",
+                                           base_fd, cut_prefix ? "." : ref_prefix,
                                            ret_all_refs, cancellable, error))
                 goto out;
             }
@@ -639,6 +630,54 @@ ostree_repo_list_refs (OstreeRepo       *self,
   return ret;
 }
 
+/**
+ * ostree_repo_list_refs:
+ * @self: Repo
+ * @refspec_prefix: (allow-none): Only list refs which match this prefix
+ * @out_all_refs: (out) (element-type utf8 utf8): Mapping from ref to checksum
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * If @refspec_prefix is %NULL, list all local and remote refspecs,
+ * with their current values in @out_all_refs.  Otherwise, only list
+ * refspecs which have @refspec_prefix as a prefix.
+ */
+gboolean
+ostree_repo_list_refs (OstreeRepo       *self,
+                       const char       *refspec_prefix,
+                       GHashTable      **out_all_refs,
+                       GCancellable     *cancellable,
+                       GError          **error)
+{
+  return _ostree_repo_list_refs_internal (self, TRUE, refspec_prefix, out_all_refs, cancellable, error);
+}
+
+/**
+ * ostree_repo_list_refs_ext:
+ * @self: Repo
+ * @refspec_prefix: (allow-none): Only list refs which match this prefix
+ * @out_all_refs: (out) (element-type utf8 utf8): Mapping from ref to checksum
+ * @flags: Options controlling listing behavior
+ * @cancellable: Cancellable
+ * @error: Error
+ *
+ * If @refspec_prefix is %NULL, list all local and remote refspecs,
+ * with their current values in @out_all_refs.  Otherwise, only list
+ * refspecs which have @refspec_prefix as a prefix.  Differently from
+ * ostree_repo_list_refs(), the prefix will not be removed from the ref
+ * name.
+ */
+gboolean
+ostree_repo_list_refs_ext (OstreeRepo                 *self,
+                           const char                 *refspec_prefix,
+                           GHashTable                 **out_all_refs,
+                           OstreeRepoListRefsExtFlags flags,
+                           GCancellable               *cancellable,
+                           GError                     **error)
+{
+  return _ostree_repo_list_refs_internal (self, FALSE, refspec_prefix, out_all_refs, cancellable, error);
+}
+
 /**
  * ostree_repo_remote_list_refs:
  * @self: Repo
index b8399b1733ff545fa6ddeaacab8e6f386ddd8ed7..07e76aa8d14e0d068647a78a3cebb7c350cb52e4 100644 (file)
@@ -342,6 +342,22 @@ gboolean      ostree_repo_list_refs (OstreeRepo       *self,
                                      GCancellable     *cancellable,
                                      GError          **error);
 
+/**
+ * OstreeRepoListRefsExtFlags:
+ * @OSTREE_REPO_LIST_REFS_EXT_NONE: No flags.
+ */
+typedef enum {
+  OSTREE_REPO_LIST_REFS_EXT_NONE = 0,
+} OstreeRepoListRefsExtFlags;
+
+_OSTREE_PUBLIC
+gboolean      ostree_repo_list_refs_ext (OstreeRepo                 *self,
+                                         const char                 *refspec_prefix,
+                                         GHashTable                 **out_all_refs,
+                                         OstreeRepoListRefsExtFlags flags,
+                                         GCancellable               *cancellable,
+                                         GError                     **error);
+
 _OSTREE_PUBLIC
 gboolean ostree_repo_remote_list_refs (OstreeRepo       *self,
                                        const char       *remote_name,